home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / dvdsinside.de.ifs < prev    next >
Encoding:
Text File  |  2005-01-16  |  11.9 KB  |  389 lines

  1. // GETINFO SCRIPTING
  2. // dvd-inside (DE/CH) import
  3.  
  4. (***************************************************
  5.  *  Movie importation script for:                  *
  6.  *      DVD-Inside (www.dvd-inside.de)             *
  7.  *                                                 *
  8.  *  v0.1 - 2. Week 2005: "From scratch"            *
  9.  *  v0.2 - 16.January 2005: "Rewritten"            *
  10.  *                                                 *
  11.  *  (c) 2004 Tiziano Mⁿller                        *
  12.  *                                                 *
  13.  *  This script is based on the IMDB-script.       *
  14.  *  So, credits go to the authors of the           *
  15.  *  IMDB-script.                                   *
  16.  *                                                 *
  17.  *  For use with Ant Movie Catalog 3.4.3           *
  18.  *  www.antp.be/software/moviecatalog              *
  19.  *                                                 *
  20.  *  This program is free software; you can         *
  21.  *  redistribute it and/or modify it under the     *
  22.  *  terms of the GNU General Public License as     *
  23.  *  published by the Free Software Foundation;     *
  24.  *  either version 2 of the License, or (at your   *
  25.  *  option) any later version.                     *
  26.  ***************************************************)
  27.  
  28. program dvd_inside;
  29.  
  30. const
  31.   CRLF = #13#10;
  32.  
  33. var
  34.   MovieName: string;
  35.   MovieURL: string;
  36.  
  37. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  38. var
  39.   i: Integer;
  40. begin
  41.   result := -1;
  42.   if StartAt < 0 then
  43.     StartAt := 0;
  44.   for i := StartAt to List.Count-1 do
  45.     if Pos(Pattern, List.GetString(i)) <> 0 then
  46.     begin
  47.       result := i;
  48.       Break;
  49.     end;
  50. end;
  51.  
  52. function MyTrim(str_: string): string;
  53. var
  54.   chars: array of char;
  55.   StrLen, i, LastSpacePos: integer;
  56. begin
  57.   result := '';
  58.  
  59.   str_ := StringReplace(str_, #9, '');
  60.   str_ := StringReplace(str_, #10, '');
  61.   str_ := StringReplace(str_, #13, '');
  62.  
  63.  
  64.   while Pos(' ', str_) = 1 do
  65.   begin
  66.     Delete(str_, Pos(' ', str_), 1);
  67.   end;
  68.  
  69.   StrLen := Length(str_);
  70.   SetArrayLength(chars, StrLen);
  71.   for i := 0 to StrLen-1 do
  72.   begin
  73.     chars[i] := Copy(str_,i+1,1);
  74.   end;
  75.  
  76.   str_ := '';
  77.   LastSpacePos := StrLen - 1;
  78.   if LastSpacePos > -1 then
  79.   begin
  80.     while chars[LastSpacePos] = ' ' do
  81.     begin
  82.       LastSpacePos := LastSpacePos - 1;
  83.     end;
  84.     for i:= 0 to LastSpacePos do
  85.     begin
  86.       str_ := str_ + chars[i];
  87.     end;
  88.   end;
  89.  
  90.   str_ := StringReplace(str_, '  ', ' ');
  91.   while result <> str_ do
  92.   begin
  93.     result := str_;
  94.     str_ := StringReplace(str_, '  ', ' ');
  95.   end;
  96.   result := StringReplace(result, ' ,', ',');
  97.  
  98. end;
  99.  
  100. procedure CutAfter(var str_: string; Pattern: string);
  101. begin
  102.   str_ := Copy(str_, Pos(Pattern, str_) + Length(Pattern), Length(str_));
  103. end;
  104.  
  105. procedure CutBefore(var Str: string; Pattern: string);
  106. begin
  107.   Str := Copy(Str, Pos(Pattern, Str), Length(Str));
  108. end;
  109.  
  110. function GetStringBetween(str_, StartTag, EndTag: string): string;
  111. var
  112.   BeginPos, EndPos: integer;
  113. begin
  114.   result := '';
  115.   if EndTag = '' then
  116.   begin
  117.     EndPos := Length(str_);
  118.   end
  119.   else
  120.     EndPos := Pos(EndTag, str_);
  121.  
  122.   BeginPos := Pos(StartTag, str_) + Length(StartTag);
  123.   if StartTag = '' then BeginPos := 1;
  124.   if BeginPos > 0 then result := Copy(str_, BeginPos, EndPos - BeginPos);
  125.  
  126. end;
  127.  
  128. function GetTrimmedStringBetween(str_, StartTag, EndTag: string): string;
  129. begin
  130.   result := MyTrim(GetStringBetween(str_, StartTag, EndTag));
  131. end;
  132.  
  133. // Extracts single movie detail (like director, genre) from page
  134. function GetStringFromHTML(Page, StartTag, CutTag, EndTag: string): string;
  135. begin
  136.   Result := '';
  137.   // recognition tag - if present, extract detail from page, otherwise assume detail is not present
  138.   if Pos(StartTag, Page) > 0 then begin
  139.     CutBefore(Page, StartTag);
  140.     // optional cut tag helps finding right string in html page
  141.     if Length(CutTag) > 0 then
  142.       CutAfter(Page, CutTag);
  143.     // movie detail copied with html tags up to end string
  144.     Result := Copy(Page, 0, Pos(EndTag, Page) - 1);
  145.     // remove html tags and decode html string
  146. //    HTMLRemoveTags(Result);
  147.     HTMLDecode(Result);
  148.   end;
  149. end;
  150.  
  151. function StripHTMLTags(str_: string): string;
  152. var
  153.   temp_char : char;
  154.   StrLen, i, CharPos : integer;
  155.   DoCopy : boolean;
  156. begin
  157.   DoCopy := true;
  158.   CharPos := 0;
  159.   result := '';
  160.   StrLen := Length(str_);
  161.   for i := 1 to StrLen do
  162.   begin
  163.     temp_char := Copy(str_,i,1);
  164.     if temp_char = '<' then
  165.     begin
  166.       DoCopy := false;
  167.       continue;
  168.     end
  169.     else if temp_char = '>' then
  170.     begin
  171.       DoCopy := true;
  172.       continue;
  173.     end
  174.     else
  175.     begin
  176.       if DoCopy then
  177.       begin
  178.         result := result + temp_char;
  179.       end;
  180.     end;
  181.   end;
  182.  
  183. end;
  184.  
  185. procedure AnalyzeIndexPage(Address, Params: string);
  186. var
  187.   IndexPage: TStringList;
  188.   Page: string;
  189. begin
  190.   IndexPage := TStringList.Create;
  191.   Address := URLEncode(Address);
  192.   Params := URLEncode(Params);
  193.   IndexPage.Text := PostPage(Address,Params);
  194.  
  195.   PickTreeClear;
  196.   PickTreeAdd('Search results', '');
  197.   AddMoviesTitles(IndexPage);
  198.   if PickTreeExec(Address) then
  199.   begin
  200.     Page := GetPage(Address);
  201.     AnalyzeMoviePage(Page, Address);
  202.   end;
  203.   IndexPage.Free;
  204. end;
  205.  
  206.  
  207.  
  208. procedure AnalyzeMoviePage(Page,Address: string);
  209. var
  210.   StrPosition: Integer;
  211.   StrTemp: string;
  212.  
  213.   OriginalTitle, Country, Year, Genre, Studio, Region, EAN_Number, Distributor, AFK, Duration: string;
  214.   VideoFormat, ScreenFormat, ScreenSystem, Language, AudioFormat, Subtitle, MediaType, Disks: string;
  215.   Comments, Bonusmaterial, Packaging, TranslatedTitle, Director, Cast, Producer, Description: string;
  216.   Music, Screenplay: string;
  217.  
  218. begin
  219. // Initializing the very important Comments
  220.   Comments := '';
  221. // URL
  222.   SetField(fieldURL, Address);
  223.  
  224. // Translated title
  225.   TranslatedTitle := MyTrim(GetStringFromHTML(Page,'<b class="ueberschrift">','">','</b>'));
  226.   SetField(fieldTranslatedTitle, TranslatedTitle);
  227.  
  228. // Original-Title, Country and Year
  229.   StrTemp := MyTrim(GetStringFromHTML(Page, 'Originaltitel:','<td>','</td>'));
  230.   StrTemp := StripHTMLTags(StrTemp);
  231.   OriginalTitle := GetTrimmedStringBetween(StrTemp,'','(');
  232.   StrTemp := GetTrimmedStringBetween(StrTemp,'(',')');
  233.   Country := Copy(StrTemp,1,Length(StrTemp)-4);
  234.   Year := Copy(StrTemp,Length(StrTemp)-4,Length(StrTemp));
  235.  
  236.   SetField(fieldOriginalTitle, OriginalTitle);
  237.   SetField(fieldCountry, Country);
  238.   SetField(fieldYear, Year);
  239.  
  240. // EAN-Number
  241.  
  242.   EAN_Number := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'EAN-Nummer:','<td>', '</td>')));
  243.   Comments := Comments + 'EAN-Nummer: ' + EAN_Number + CRLF;
  244.  
  245. // Genre
  246.   Genre := '';
  247.   Genre := MyTrim(GetStringFromHTML(Page, 'Genre:', '<td>', '</td>'));
  248.   Genre := MyTrim(StripHTMLTags(Genre));
  249.   setField(fieldCategory, Genre);
  250.  
  251. // Studio
  252.   Studio := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Studio:','</td>', '</tr>')));
  253.   Comments := Comments + 'Studio: ' + Studio + CRLF;
  254.  
  255. // Distributor
  256.   Distributor := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Vertrieb:','</td>', '</tr>')));
  257.   Comments := Comments + 'Vertrieb: ' + Distributor + CRLF;
  258.  
  259. // Altersfreigabe
  260.   AFK := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Altersfreigabe:','</td>', '</tr>')));
  261.   Comments := Comments + 'Altersfreigabe: ' + AFK + CRLF;
  262.  
  263. // CountryCode
  264.   Region := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Ländercode:','</td>', '</tr>')));
  265.   VideoFormat := 'DVD Zone '+Region;
  266.   setField(fieldVideoFormat,VideoFormat);
  267.  
  268. // Duration
  269.   Duration := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Filmlänge:','</td>', '</tr>')));
  270.   Duration := StringReplace(Duration,' min','');
  271.   setField(fieldLength,Duration);
  272.  
  273. // Description
  274.   Description := GetStringFromHTML(Page, 'Inhalt:','</td>', '</tr>');
  275.   Description := StringReplace(Description, '<br />','*');
  276.   Description := MyTrim(StripHTMLTags(Description));
  277.   Description := StringReplace(Description, '*',CRLF);
  278.   setField(fieldDescription,Description);
  279.  
  280. // Actors
  281.   Cast := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Schauspieler:','</td>', '</tr>')));
  282.   setField(fieldActors,Cast);
  283.  
  284. // Director
  285.   Director := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Regie:','</td>', '</tr>')));
  286.   setField(fieldDirector,Director);
  287.  
  288. // Production
  289.   Producer := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Produzent:','</td>', '</tr>')));
  290.   setField(fieldProducer,Producer);
  291.  
  292. // Music
  293.   Music := '';
  294.   Music := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Music:','</td>', '</tr>')));
  295.   Comments := Comments + 'Musik: ' + Music + CRLF;
  296.  
  297. // Screenplay
  298.   Screenplay := '';
  299.   Screenplay := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Drehbuch:','</td>', '</tr>')));
  300.   Comments := Comments + 'Drehbuch: ' + Screenplay + CRLF;
  301.  
  302. // Screen format & system
  303.   ScreenFormat := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Format:','</td>', '</tr>')));
  304.   ScreenSystem := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'System:','</td>', '</tr>')));
  305.   setField(fieldResolution,ScreenSystem + ' - ' + ScreenFormat);
  306.  
  307. // Audioformat/Language
  308.   AudioFormat := '';
  309.   Language := '';
  310.   StrTemp := GetStringFromHTML(Page, 'Tonformate / Sprachen:', '</td>', '</td>');
  311.  
  312.   StrTemp := StringReplace(StrTemp, '<br />','*') + '*';
  313.   StrTemp := MyTrim(StripHTMLTags(StrTemp));
  314.  
  315.   while Pos('*',StrTemp) > 0 do
  316.   begin
  317.     AudioFormat := AudioFormat + ', ' + MyTrim(Copy(StrTemp,1,Pos(' in ',StrTemp)));
  318.     Language := Language + ', ' + MyTrim(Copy(StrTemp,Pos(' in ',StrTemp)+4,Pos('*',StrTemp)-(Pos(' in ',StrTemp)+4)));
  319.     CutAfter(StrTemp,'*');
  320.   end;
  321.   AudioFormat := Copy(AudioFormat,3,Length(AudioFormat));
  322.   Language := Copy(Language,3,Length(Language));
  323.  
  324.   setField(fieldAudioFormat, AudioFormat);
  325.   setField(fieldLanguages, Language);
  326.  
  327. // Subtitles
  328.   Subtitle := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Untertitel:', '</td>', '</tr>')));
  329.   if Subtitle = 'Keine Untertitel' then Subtitle := '';
  330.   setField(fieldSubtitles, Subtitle);
  331.  
  332. // Mediatype
  333.   MediaType := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Medientyp:','</td>', '</tr>')));
  334.   setField(fieldMediaType, MediaType);
  335.  
  336. // Disks
  337.   Disks := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Medienanzahl:','</td>', '</tr>')));
  338.   setField(fieldDisks, Disks);
  339.  
  340. // Package
  341.   Packaging := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Verpackung:', '</td>', '</tr>')));
  342.   Comments := Comments + 'Verpackung: ' + Packaging + CRLF;
  343.  
  344. // Bonusmaterial
  345.   Bonusmaterial := MyTrim(GetStringFromHTML(Page, 'Bonus-Matrial:', '</td>', '</tr>'));
  346.   Bonusmaterial := StringReplace(Bonusmaterial,'<br />','*');
  347.   Bonusmaterial := MyTrim(StripHTMLTags(Bonusmaterial));
  348.   Bonusmaterial := StringReplace(Bonusmaterial,'*',CRLF);
  349.   Comments := Comments + CRLF + 'Bonusmaterial' + CRLF + '===========' + CRLF + Bonusmaterial + CRLF;
  350.  
  351.  
  352.  
  353.   setField(fieldComments,Comments);
  354.   DisplayResults;
  355. end;
  356.  
  357. procedure AddMoviesTitles(ResultsPage: TStringList);
  358. var
  359.   Page: string;
  360.   MovieTitle, MovieAddress: String;
  361. begin
  362.   Page := ResultsPage.Text;
  363.   while Pos('details.php', Page) > 0 do
  364.   begin
  365.     CutBefore(Page, 'details.php');
  366.     MovieAddress := 'http://www.dvd-inside.de/db/' + GetStringFromHTML(Page, 'details.php', '', '"');
  367.     MovieTitle := MyTrim(GetStringFromHTML(Page, 'details.php', '">', '</tr>'));
  368.     MovieTitle := StringReplace(MovieTitle, '</td>', ' | ');
  369.     MovieTitle := MyTrim(StripHTMLTags(MovieTitle));
  370.     CutAfter(Page, '</tr>');
  371.     PickTreeAdd(MovieTitle, MovieAddress);
  372.   end;
  373. end;
  374.  
  375. begin
  376.   if CheckVersion(3,4,3) then
  377.   begin
  378.     MovieName := GetField(fieldOriginalTitle);
  379.     if MovieName = '' then
  380.       MovieName := GetField(fieldTranslatedTitle);
  381.     if Input('dvd-inside import', 'Enter the title of the movie:', MovieName) then
  382.     begin
  383.       AnalyzeIndexPage('http://www.dvd-inside.de/db/search.php', 'action=new&title='+MovieName+'&suchen=Suchen');
  384.     end;
  385.   end
  386.   else
  387.     ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.3)');
  388. end.
  389.